-- DisplayConfig.lua
-- 显示配置模块：集中管理分辨率、边界和相机设置
local DisplayConfig = {}

-- 目标渲染分辨率
DisplayConfig.TARGET_WIDTH = 2560
DisplayConfig.TARGET_HEIGHT = 1600

-- 场景逻辑尺寸（基于关卡大小）
local LevelTileConfig = require("LevelTileConfig")
local levelBounds = LevelTileConfig.getLevelBounds()

DisplayConfig.SCENE_LOGIC_WIDTH = levelBounds.width
DisplayConfig.SCENE_LOGIC_HEIGHT = levelBounds.height

-- 智能相机缩放计算
function DisplayConfig.calculateCameraZoom()
    -- 基础缩放：基于高度计算，确保垂直方向完整显示
    local baseZoom = DisplayConfig.TARGET_HEIGHT / DisplayConfig.SCENE_LOGIC_HEIGHT
    
    -- 计算宽高比，用于判断场景类型
    local targetAspect = DisplayConfig.TARGET_WIDTH / DisplayConfig.TARGET_HEIGHT
    local logicAspect = DisplayConfig.SCENE_LOGIC_WIDTH / DisplayConfig.SCENE_LOGIC_HEIGHT
    
    local finalZoom = baseZoom
    
    -- 如果场景很宽，适当缩小以显示更多水平内容
    if logicAspect > targetAspect * 1.5 then
        -- 计算基于宽度的最小缩放，确保水平方向也能显示足够内容
        local minZoomByWidth = DisplayConfig.TARGET_WIDTH / DisplayConfig.SCENE_LOGIC_WIDTH
        finalZoom = math.max(baseZoom * 0.7, minZoomByWidth)
    else
        -- 正常场景：使用高度基准缩放，保持相机缩放不变
        finalZoom = baseZoom * 1.0  -- 改为1.0，保持原始缩放
    end
    
    return finalZoom
end

-- 应用计算后的相机缩放
DisplayConfig.CAMERA_ZOOM = DisplayConfig.calculateCameraZoom()

-- 缩放因子（相对于1920x1080基准分辨率）
DisplayConfig.SCALE_FACTOR_X = DisplayConfig.TARGET_WIDTH / 1920
DisplayConfig.SCALE_FACTOR_Y = DisplayConfig.TARGET_HEIGHT / 1080

-- 统一的边界配置（基于关卡世界的逻辑边界）
DisplayConfig.WORLD_BOUNDS = levelBounds

-- 获取安全的初始位置（从关卡管理器获取）
function DisplayConfig.getSafeStartPosition()
    local LevelTileConfig = require("LevelTileConfig")
    return LevelTileConfig.getInitialPlayerPosition()
end

function DisplayConfig.getCameraBounds()
    -- 相机边界等于世界边界，让相机可以在整个关卡范围内移动
    return {
        x = DisplayConfig.WORLD_BOUNDS.left,
        y = DisplayConfig.WORLD_BOUNDS.bottom,
        width = DisplayConfig.WORLD_BOUNDS.width,
        height = DisplayConfig.WORLD_BOUNDS.height
    }
end

-- 根据目标分辨率调整数值（用于UI元素缩放）
function DisplayConfig.adjustValue(value, isXAxis)
    if isXAxis then
        return value * DisplayConfig.SCALE_FACTOR_X  -- X轴缩放
    else
        return value * DisplayConfig.SCALE_FACTOR_Y  -- Y轴缩放
    end
end

return DisplayConfig